#define _CRT_SECURE_NO_WARNINGS 1
//有一个长为n的序列 ，以及一个大小为k的窗口。现在这个从左边开始向右滑动，每次滑动一个单
//位，求出每次滑动后窗口中的最大值和最小值。

#include<iostream>

using namespace std;

int search_max(int* &array,int index,int len)
{
	int max = array[index];
	for (int i = index; i < index+len; i++)
	{
		if (max < array[i])
		{
			max = array[i];
		}
	}
	return max;
}

int search_min(int*& array, int index, int len)
{
	int min = array[index];
	for (int i = index; i < index+len; i++)
	{
		if (min > array[i])
		{
			min = array[i];
		}
	}
	return min;
}

int main()
{
	//初始化
	int n = 0, k = 0;
	cin >> n >> k;
	int* arr = new int[n];
	for (int i=0;i<n;i++)
	{
		cin >> arr[i];
	}
	//最大值数组
	int* max = new int[n - k + 1];
	//最小值数组
	int* min = new int[n - k + 1];
	//从左到右遍历
	for (int i = 0; i < n - k + 1; i++)
	{
		max[i]=search_max(arr, i, k);
		min[i] =search_min(arr, i, k);
	}
	//输出

	for (int i = 0; i < n - k + 1; i++)
	{
		cout << min[i] << ' ';
	}
	cout << endl;
	for (int i = 0; i < n - k + 1; i++)
	{
		cout << max[i] << ' ';
	}
	cout << endl;
	delete arr;
	delete max;
	delete min;

	return 0;
}